1   /*
2    * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved.
3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4    *
5    * This code is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License version 2 only, as
7    * published by the Free Software Foundation.
8    *
9    * This code is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12   * version 2 for more details (a copy is included in the LICENSE file that
13   * accompanied this code).
14   *
15   * You should have received a copy of the GNU General Public License version
16   * 2 along with this work; if not, write to the Free Software Foundation,
17   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18   *
19   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20   * or visit www.oracle.com if you need additional information or have any
21   * questions.
22   */
23  
24  /*
25   * @test
26   * @bug 4635086
27   * @library ../UTIL
28   * @build TestUtil
29   * @run main TestKATForECB_VK
30   * @summary Known Answer Test for AES cipher with ECB mode
31   * @author Valerie Peng
32   */
33  import java.security.*;
34  import javax.crypto.*;
35  import javax.crypto.spec.*;
36  import java.math.*;
37  import com.sun.crypto.provider.*;
38  
39  import java.util.*;
40  
41  public class TestKATForECB_VK
42  {
43      private static final String ALGO = "AES";
44      private static final String MODE = "ECB";
45      private static final String PADDING = "NoPadding";
46  
47      //ecb-vk.txt
48      private static byte[] PT = new byte[16];
49  
50      private static String[][] CTS = {
51          // Cipher Texts for 128-bit key
52          {
53  "0EDD33D3C621E546455BD8BA1418BEC8",
54  "C0CC0C5DA5BD63ACD44A80774FAD5222",
55  "2F0B4B71BC77851B9CA56D42EB8FF080",
56  "6B1E2FFFE8A114009D8FE22F6DB5F876",
57  "9AA042C315F94CBB97B62202F83358F5",
58  "DBE01DE67E346A800C4C4B4880311DE4",
59  "C117D2238D53836ACD92DDCDB85D6A21",
60  "DC0ED85DF9611ABB7249CDD168C5467E",
61  "807D678FFF1F56FA92DE3381904842F2",
62  "0E53B3FCAD8E4B130EF73AEB957FB402",
63  "969FFD3B7C35439417E7BDE923035D65",
64  "A99B512C19CA56070491166A1503BF15",
65  "6E9985252126EE344D26AE369D2327E3",
66  "B85F4809F904C275491FCDCD1610387E",
67  "ED365B8D7D20C1F5D53FB94DD211DF7B",
68  "B3A575E86A8DB4A7135D604C43304896",
69  "89704BCB8E69F846259EB0ACCBC7F8A2",
70  "C56EE7C92197861F10D7A92B90882055",
71  "92F296F6846E0EAF9422A5A24A08B069",
72  "E67E32BB8F11DEB8699318BEE9E91A60",
73  "B08EEF85EAF626DD91B65C4C3A97D92B",
74  "661083A6ADDCE79BB4E0859AB5538013",
75  "55DFE2941E0EB10AFC0B333BD34DE1FE",
76  "6BFE5945E715C9662609770F8846087A",
77  "79848E9C30C2F8CDA8B325F7FED2B139",
78  "7A713A53B99FEF34AC04DEEF80965BD0",
79  "18144A2B46620D32C3C32CE52D49257F",
80  "872E827C70887C80749F7B8BB1847C7E",
81  "6B86C6A4FE6A60C59B1A3102F8DE49F3",
82  "9848BB3DFDF6F532F094679A4C231A20",
83  "925AD528E852E329B2091CD3F1C2BCEE",
84  "80DF436544B0DD596722E46792A40CD8",
85  "525DAF18F93E83E1E74BBBDDE4263BBA",
86  "F65C9D2EE485D24701FFA3313B9D5BE6",
87  "E4FC8D8BCA06425BDF94AFA40FCC14BA",
88  "A53F0A5CA1E4E6440BB975FF320DE6F8",
89  "D55313B9394080462E87E02899B553F0",
90  "34A71D761F71BCD344384C7F97D27906",
91  "233F3D819599612EBC89580245C996A8",
92  "B4F1374E5268DBCB676E447529E53F89",
93  "0816BD27861D2BA891D1044E39951E96",
94  "F3BE9EA3F10C73CA64FDE5DB13A951D1",
95  "2448086A8106FBD03048DDF857D3F1C8",
96  "670756E65BEC8B68F03D77CDCDCE7B91",
97  "EF968CF0D36FD6C6EFFD225F6FB44CA9",
98  "2E8767157922E3826DDCEC1B0CC1E105",
99  "78CE7EEC670E45A967BAB17E26A1AD36",
100 "3C5CEE825655F098F6E81A2F417DA3FB",
101 "67BFDB431DCE1292200BC6F5207ADB12",
102 "7540FD38E447C0779228548747843A6F",
103 "B85E513301F8A936EA9EC8A21A85B5E6",
104 "04C67DBF16C11427D507A455DE2C9BC5",
105 "03F75EB8959E55079CFFB4FF149A37B6",
106 "74550287F666C63BB9BC7838433434B0",
107 "7D537200195EBC3AEFD1EAAB1C385221",
108 "CE24E4D40C68A82B535CBD3C8E21652A",
109 "AB20072405AA8FC40265C6F1F3DC8BC0",
110 "6CFD2CF688F566B093F67B9B3839E80A",
111 "BD95977E6B7239D407A012C5544BF584",
112 "DF9C0130AC77E7C72C997F587B46DBE0",
113 "E7F1B82CADC53A648798945B34EFEFF2",
114 "932C6DBF69255CF13EDCDB72233ACEA3",
115 "5C76002BC7206560EFE550C80B8F12CC",
116 "F6B7BDD1CAEEBAB574683893C4475484",
117 "A920E37CC6DC6B31DA8C0169569F5034",
118 "919380ECD9C778BC513148B0C28D65FD",
119 "EE67308DD3F2D9E6C2170755E5784BE1",
120 "3CC73E53B85609023A05E149B223AE09",
121 "983E8AF7CF05EBB28D71EB841C9406E6",
122 "0F3099B2D31FA5299EE5BF43193287FC",
123 "B763D84F38C27FE6931DCEB6715D4DB6",
124 "5AE3C9B0E3CC29C0C61565CD01F8A248",
125 "F58083572CD90981958565D48D2DEE25",
126 "7E6255EEF8F70C0EF10337AAB1CCCEF8",
127 "AAD4BAC34DB22821841CE2F631961902",
128 "D7431C0409BB1441BA9C6858DC7D4E81",
129 "EF9298C65E339F6E801A59C626456993",
130 "53FE29F68FF541ABC3F0EF3350B72F7E",
131 "F6BBA5C10DB02529E2C2DA3FB582CC14",
132 "E4239AA37FC531A386DAD1126FC0E9CD",
133 "8F7758F857D15BBE7BFD0E416404C365",
134 "D273EB57C687BCD1B4EA7218A509E7B8",
135 "65D64F8D76E8B3423FA25C4EB58A210A",
136 "623D802B4EC450D66A16625702FCDBE0",
137 "7496460CB28E5791BAEAF9B68FB00022",
138 "34EA600F18BB0694B41681A49D510C1D",
139 "5F8FF0D47D5766D29B5D6E8F46423BD8",
140 "225F9286C5928BF09F84D3F93F541959",
141 "B21E90D25DF383416A5F072CEBEB1FFB",
142 "4AEFCDA089318125453EB9E8EB5E492E",
143 "4D3E75C6CD40EC4869BC85158591ADB8",
144 "63A8B904405436A1B99D7751866771B7",
145 "64F0DAAE47529199792EAE172BA53293",
146 "C3EEF84BEA18225D515A8C852A9047EE",
147 "A44AC422B47D47B81AF73B3E9AC9596E",
148 "D16E04A8FBC435094F8D53ADF25F5084",
149 "EF13DC34BAB03E124EEAD8B6BF44B532",
150 "D94799075C24DCC067AF0D392049250D",
151 "14F431771EDDCE4764C21A2254B5E3C8",
152 "7039329F36F2ED682B02991F28D64679",
153 "124EE24EDE5551639DB8B8B941F6141D",
154 "C2852879A34D5184E478EC918B993FEE",
155 "86A806A3525B93E432053C9AB5ABBEDF",
156 "C1609BF5A4F07E37C17A36366EC23ECC",
157 "7E81E7CB92159A51FFCEA331B1E8EA53",
158 "37A7BE002856C5A59A6E03EAFCE7729A",
159 "BDF98A5A4F91E890C9A1D1E5FAAB138F",
160 "4E96ACB66E051F2BC739CC3D3E34A26B",
161 "EE996CDD120EB86E21ECFA49E8E1FCF1",
162 "61B9E6B579DBF6070C351A1440DD85FF",
163 "AC369E484316440B40DFC83AA96E28E7",
164 "0A2D16DE985C76D45C579C1159413BBE",
165 "DA3FDC38DA1D374FA4802CDA1A1C6B0F",
166 "B842523D4C41C2211AFE43A5800ADCE3",
167 "9E2CDA90D8E992DBA6C73D8229567192",
168 "D49583B781D9E20F5BE101415957FC49",
169 "EF09DA5C12B376E458B9B8670032498E",
170 "A96BE0463DA774461A5E1D5A9DD1AC10",
171 "32CEE3341060790D2D4B1362EF397090",
172 "21CEA416A3D3359D2C4D58FB6A035F06",
173 "172AEAB3D507678ECAF455C12587ADB7",
174 "B6F897941EF8EBFF9FE80A567EF38478",
175 "A9723259D94A7DC662FB0C782CA3F1DD",
176 "2F91C984B9A4839F30001B9F430493B4",
177 "0472406345A610B048CB99EE0EF3FA0F",
178 "F5F39086646F8C05ED16EFA4B617957C",
179 "26D50F485A30408D5AF47A5736292450",
180 "0545AAD56DA2A97C3663D1432A3D1C84"
181         },
182         // Cipher Texts for 192-bit key
183         {
184 "DE885DC87F5A92594082D02CC1E1B42C",
185 "C749194F94673F9DD2AA1932849630C1",
186 "0CEF643313912934D310297B90F56ECC",
187 "C4495D39D4A553B225FBA02A7B1B87E1",
188 "636D10B1A0BCAB541D680A7970ADC830",
189 "07CF045786BD6AFCC147D99E45A901A7",
190 "6A8E3F425A7599348F95398448827976",
191 "5518276836148A00D91089A20D8BFF57",
192 "F267E07B5E87E3BC20B969C61D4FCB06",
193 "5A1CDE69571D401BFCD20DEBADA2212C",
194 "70A9057263254701D12ADD7D74CD509E",
195 "35713A7E108031279388A33A0FE2E190",
196 "E74EDE82B1254714F0C7B4B243108655",
197 "39272E3100FAA37B55B862320D1B3EB3",
198 "6D6E24C659FC5AEF712F77BCA19C9DD0",
199 "76D18212F972370D3CC2C6C372C6CF2F",
200 "B21A1F0BAE39E55C7594ED570A7783EA",
201 "77DE202111895AC48DD1C974B358B458",
202 "67810B311969012AAF7B504FFAF39FD1",
203 "C22EA2344D3E9417A6BA07843E713AEA",
204 "C79CAF4B97BEE0BD0630AB354539D653",
205 "135FD1AF761D9AE23DF4AA6B86760DB4",
206 "D4659D0B06ACD4D56AB8D11A16FD83B9",
207 "F7D270028FC188E4E4F35A4AAA25D4D4",
208 "345CAE5A8C9620A9913D5473985852FF",
209 "4E8980ADDE60B0E42C0B287FEA41E729",
210 "F11B6D74E1F15155633DC39743C1A527",
211 "9C87916C0180064F9D3179C6F5DD8C35",
212 "71AB186BCAEA518E461D4F7FAD230E6A",
213 "C4A31BBC3DAAF742F9141C2A5001A49C",
214 "E7C47B7B1D40F182A8928C8A55671D07",
215 "8E17F294B28FA373C6249538868A7EEF",
216 "754404096A5CBC08AF09491BE249141A",
217 "101CB56E55F05D86369B6D1069204F0A",
218 "73F19BB6604205C6EE227B9759791E41",
219 "6270C0028F0D136C37A56B2CB64D24D6",
220 "A3BF7C2C38D1114A087ECF212E694346",
221 "49CABFF2CEF7D9F95F5EFB1F7A1A7DDE",
222 "EC7F8A47CC59B849469255AD49F62752",
223 "68FAE55A13EFAF9B07B3552A8A0DC9D1",
224 "211E6B19C69FAEF481F64F24099CDA65",
225 "DBB918C75BC5732416F79FB0C8EE4C5C",
226 "98D494E5D963A6C8B92536D3EC35E3FD",
227 "C9A873404D403D6F074190851D67781A",
228 "073AEF4A7C77D921928CB0DD9D27CAE7",
229 "89BDE25CEE36FDE769A10E52298CF90F",
230 "26D0842D37EAD38557C65E0A5E5F122E",
231 "F8294BA375AF46B3F22905BBAFFAB107",
232 "2AD63EB4D0D43813B979CF72B35BDB94",
233 "7710C171EE0F4EFA39BE4C995180181D",
234 "C0CB2B40DBA7BE8C0698FAE1E4B80FF8",
235 "97970E505194622FD955CA1B80B784E9",
236 "7CB1824B29F850900DF2CAD9CF04C1CF",
237 "FDF4F036BB988E42F2F62DE63FE19A64",
238 "08908CFE2C82606B2C15DF61B75CF3E2",
239 "B3AA689EF2D07FF365ACB9ADBA2AF07A",
240 "F2672CD8EAA3B98776660D0263656F5C",
241 "5BDEAC00E986687B9E1D94A0DA7BF452",
242 "E6D57BD66EA1627363EE0C4B711B0B21",
243 "03730DD6ACB4AD9996A63BE7765EC06F",
244 "A470E361AA5437B2BE8586D2F78DE582",
245 "7567FEEFA559911FD479670246B484E3",
246 "29829DEA15A4E7A4C049045E7B106E29",
247 "A407834C3D89D48A2CB7A152208FA4ED",
248 "68F948053F78FEF0D8F9FE7EF3A89819",
249 "B605174CAB13AD8FE3B20DA3AE7B0234",
250 "CCAB8F0AEBFF032893996D383CBFDBFA",
251 "AF14BB8428C9730B7DC17B6C1CBEBCC8",
252 "5A41A21332040877EB7B89E8E80D19FE",
253 "AC1BA52EFCDDE368B1596F2F0AD893A0",
254 "41B890E31B9045E6ECDC1BC3F2DB9BCC",
255 "4D54A549728E55B19A23660424A0F146",
256 "A917581F41C47C7DDCFFD5285E2D6A61",
257 "604DF24BA6099B93A7405A524D764FCB",
258 "78D9D156F28B190E232D1B7AE7FC730A",
259 "5A12C39E442CD7F27B3CD77F5D029582",
260 "FF2BF2F47CF7B0F28EE25AF95DBF790D",
261 "1863BB7D193BDA39DF090659EB8AE48B",
262 "38178F2FB4CFCF31E87E1ABCDC023EB5",
263 "F5B13DC690CC0D541C6BA533023DC8C9",
264 "48EC05238D7375D126DC9D08884D4827",
265 "ACD0D81139691B310B92A6E377BACC87",
266 "9A4AA43578B55CE9CC178F0D2E162C79",
267 "08AD94BC737DB3C87D49B9E01B720D81",
268 "3BCFB2D5D210E8332900C5991D551A2A",
269 "C5F0C6B9397ACB29635CE1A0DA2D8D96",
270 "844A29EFC693E2FA9900F87FBF5DCD5F",
271 "5126A1C41051FEA158BE41200E1EA59D",
272 "302123CA7B4F46D667FFFB0EB6AA7703",
273 "A9D16BCE7DB5C024277709EE2A88D91A",
274 "F013C5EC123A26CFC34B598C992A996B",
275 "E38A825CD971A1D2E56FB1DBA248F2A8",
276 "6E701773C0311E0BD4C5A097406D22B3",
277 "754262CEF0C64BE4C3E67C35ABE439F7",
278 "C9C2D4C47DF7D55CFA0EE5F1FE5070F4",
279 "6AB4BEA85B172573D8BD2D5F4329F13D",
280 "11F03EF28E2CC9AE5165C587F7396C8C",
281 "0682F2EB1A68BAC7949922C630DD27FA",
282 "ABB0FEC0413D659AFE8E3DCF6BA873BB",
283 "FE86A32E19F805D6569B2EFADD9C92AA",
284 "E434E472275D1837D3D717F2EECC88C3",
285 "74E57DCD12A21D26EF8ADAFA5E60469A",
286 "C275429D6DAD45DDD423FA63C816A9C1",
287 "7F6EC1A9AE729E86F7744AED4B8F4F07",
288 "48B5A71AB9292BD4F9E608EF102636B2",
289 "076FB95D5F536C78CBED3181BCCF3CF1",
290 "BFA76BEA1E684FD3BF9256119EE0BC0F",
291 "7D395923D56577F3FF8670998F8C4A71",
292 "BA02C986E529AC18A882C34BA389625F",
293 "3DFCF2D882AFE75D3A191193013A84B5",
294 "FAD1FDE1D0241784B63080D2C74D236C",
295 "7D6C80D39E41F007A14FB9CD2B2C15CD",
296 "7975F401FC10637BB33EA2DB058FF6EC",
297 "657983865C55A818F02B7FCD52ED7E99",
298 "B32BEB1776F9827FF4C3AC9997E84B20",
299 "2AE2C7C374F0A41E3D46DBC3E66BB59F",
300 "4D835E4ABDD4BDC6B88316A6E931A07F",
301 "E07EFABFF1C353F7384EBB87B435A3F3",
302 "ED3088DC3FAF89AD87B4356FF1BB09C2",
303 "4324D01140C156FC898C2E32BA03FB05",
304 "BE15D016FACB5BAFBC24FA9289132166",
305 "AC9B7048EDB1ACF4D97A5B0B3F50884B",
306 "448BECE1F86C7845DFA9A4BB2A016FB3",
307 "10DD445E87686EB46EA9B1ABC49257F0",
308 "B7FCCF7659FA756D4B7303EEA6C07458",
309 "289117115CA3513BAA7640B1004872C2",
310 "57CB42F7EE7186051F50B93FFA7B35BF",
311 "F2741BFBFB81663B9136802FB9C3126A",
312 "E32DDDC5C7398C096E3BD535B31DB5CE",
313 "81D3C204E608AF9CC713EAEBCB72433F",
314 "D4DEEF4BFC36AAA579496E6935F8F98E",
315 "C356DB082B97802B038571C392C5C8F6",
316 "A3919ECD4861845F2527B77F06AC6A4E",
317 "A53858E17A2F802A20E40D44494FFDA0",
318 "5D989E122B78C758921EDBEEB827F0C0",
319 "4B1C0C8F9E7830CC3C4BE7BD226FA8DE",
320 "82C40C5FD897FBCA7B899C70713573A1",
321 "ED13EE2D45E00F75CCDB51EA8E3E36AD",
322 "F121799EEFE8432423176A3CCF6462BB",
323 "4FA0C06F07997E98271DD86F7B355C50",
324 "849EB364B4E81D058649DC5B1BF029B9",
325 "F48F9E0DE8DE7AD944A207809335D9B1",
326 "E59E9205B5A81A4FD26DFCF308966022",
327 "3A91A1BE14AAE9ED700BDF9D70018804",
328 "8ABAD78DCB79A48D79070E7DA89664EC",
329 "B68377D98AAE6044938A7457F6C649D9",
330 "E4E1275C42F5F1B63D662C099D6CE33D",
331 "7DEF32A34C6BE668F17DA1BB193B06EF",
332 "78B6000CC3D30CB3A74B68D0EDBD2B53",
333 "0A47531DE88DD8AE5C23EAE4F7D1F2D5",
334 "667B24E8000CF68231EC484581D922E5",
335 "39DAA5EBD4AACAE130E9C33236C52024",
336 "E3C88760B3CB21360668A63E55BB45D1",
337 "F131EE903C1CDB49D416866FD5D8DE51",
338 "7A1916135B0447CF4033FC13047A583A",
339 "F7D55FB27991143DCDFA90DDF0424FCB",
340 "EA93E7D1CA1111DBD8F7EC111A848C0C",
341 "2A689E39DFD3CBCBE221326E95888779",
342 "C1CE399CA762318AC2C40D1928B4C57D",
343 "D43FB6F2B2879C8BFAF0092DA2CA63ED",
344 "224563E617158DF97650AF5D130E78A5",
345 "6562FDF6833B7C4F7484AE6EBCC243DD",
346 "93D58BA7BED22615D661D002885A7457",
347 "9A0EF559003AD9E52D3E09ED3C1D3320",
348 "96BAF5A7DC6F3DD27EB4C717A85D261C",
349 "B8762E06884900E8452293190E19CCDB",
350 "785416A22BD63CBABF4B1789355197D3",
351 "A0D20CE1489BAA69A3612DCE90F7ABF6",
352 "700244E93DC94230CC607FFBA0E48F32",
353 "85329E476829F872A2B4A7E59F91FF2D",
354 "E4219B4935D988DB719B8B8B2B53D247",
355 "6ACDD04FD13D4DB4409FE8DD13FD737B",
356 "9EB7A670AB59E15BE582378701C1EC14",
357 "29DF2D6935FE657763BC7A9F22D3D492",
358 "99303359D4A13AFDBE6C784028CE533A",
359 "FF5C70A6334545F33B9DBF7BEA0417CA",
360 "289F58A17E4C50EDA4269EFB3DF55815",
361 "EA35DCB416E9E1C2861D1682F062B5EB",
362 "3A47BF354BE775383C50B0C0A83E3A58",
363 "BF6C1DC069FB95D05D43B01D8206D66B",
364 "046D1D580D5898DA6595F32FD1F0C33D",
365 "5F57803B7B82A110F7E9855D6A546082",
366 "25336ECF34E7BE97862CDFF715FF05A8",
367 "ACBAA2A943D8078022D693890E8C4FEF",
368 "3947597879F6B58E4E2F0DF825A83A38",
369 "4EB8CC3335496130655BF3CA570A4FC0",
370 "BBDA7769AD1FDA425E18332D97868824",
371 "5E7532D22DDB0829A29C868198397154",
372 "E66DA67B630AB7AE3E682855E1A1698E",
373 "4D93800F671B48559A64D1EA030A590A",
374 "F33159FCC7D9AE30C062CD3B322AC764",
375 "8BAE4EFB70D33A9792EEA9BE70889D72"
376         },
377         // Cipher Texts for 256-bit key
378         {
379 "E35A6DCB19B201A01EBCFA8AA22B5759",
380 "5075C2405B76F22F553488CAE47CE90B",
381 "49DF95D844A0145A7DE01C91793302D3",
382 "E7396D778E940B8418A86120E5F421FE",
383 "05F535C36FCEDE4657BE37F4087DB1EF",
384 "D0C1DDDD10DA777C68AB36AF51F2C204",
385 "1C55FB811B5C6464C4E5DE1535A75514",
386 "52917F3AE957D5230D3A2AF57C7B5A71",
387 "C6E3D5501752DD5E9AEF086D6B45D705",
388 "A24A9C7AF1D9B1E17E1C9A3E711B3FA7",
389 "B881ECA724A6D43DBC6B96F6F59A0D20",
390 "EC524D9A24DFFF2A9639879B83B8E137",
391 "34C4F345F5466215A037F443635D6F75",
392 "5BA5055BEDB8895F672E29F2EB5A355D",
393 "B3F692AA3A435259EBBEF9B51AD1E08D",
394 "414FEB4376F2C64A5D2FBB2ED531BA7D",
395 "A20D519E3BCA3303F07E81719F61605E",
396 "A08D10E520AF811F45BD60A2DC0DC4B1",
397 "B06893A8C563C430E6F3858826EFBBE4",
398 "0FFEE26AE2D3929C6BD9C6BEDFF84409",
399 "4D0F5E906ED77801FC0EF53EDC5F9E2B",
400 "8B6EC00119AD8B026DCE56EA7DEFE930",
401 "69026591D43363EE9D83B5007F0B484E",
402 "27135D86950C6A2F86872706279A4761",
403 "35E6DB8723F281DA410C3AC8535ED77C",
404 "57427CF214B8C28E4BBF487CCB8D0E09",
405 "6DF01BF56E5131AC87F96E99CAB86367",
406 "3856C5B55790B768BBF7D43031579BCF",
407 "1E6ED8FB7C15BC4D2F63BA7037ED44D0",
408 "E1B2ED6CD8D93D455534E401156D4BCF",
409 "EFBCCA5BDFDAD10E875F02336212CE36",
410 "0B777F02FD18DCE2646DCFE868DFAFAD",
411 "C8A104B5693D1B14F5BF1F10100BF508",
412 "4CCE6615244AFCB38408FECE219962EA",
413 "F99E7845D3A255B394C9C050CBA258B1",
414 "B4AFBB787F9BCFB7B55FDF447F611295",
415 "AE1C426A697FAF2808B7EF6ADDB5C020",
416 "7572F92811A85B9BDD38DEAD9945BCAE",
417 "71BC7AA46E43FB95A181527D9F6A360F",
418 "5542EF2923066F1EC8F546DD0D8E7CA8",
419 "6B92317C7D623790B748FDD7EFC42422",
420 "0FE7C097E899C71EF045360F8D6C25CF",
421 "4ECE7EE107D0264D04693151C25B9DF6",
422 "FD6AE687CBFCA9E301045888D3BB9605",
423 "476B579C8556C7254424902CC1D6D36E",
424 "4133CBCDFDD6B8860A1FC18665D6D71B",
425 "3B36EC2664798C108B816812C65DFDC7",
426 "364E20A234FEA385D48DC5A09C9E70CF",
427 "4A4BA25969DE3F5EE5642C71AAD0EFD1",
428 "E42CBAAE43297F67A76C1C501BB79E36",
429 "23CEDEDA4C15B4C037E8C61492217937",
430 "A1719147A1F4A1A1180BD16E8593DCDE",
431 "AB82337E9FB0EC60D1F25A1D0014192C",
432 "74BF2D8FC5A8388DF1A3A4D7D33FC164",
433 "D5B493317E6FBC6FFFD664B3C491368A",
434 "BA767381586DA56A2A8D503D5F7ADA0B",
435 "E8E6BC57DFE9CCADB0DECABF4E5CF91F",
436 "3C8E5A5CDC9CEED90815D1F84BB2998C",
437 "283843020BA38F056001B2FD585F7CC9",
438 "D8ADC7426F623ECE8741A70621D28870",
439 "D7C5C215592D06F00E6A80DA69A28EA9",
440 "52CF6FA433C3C870CAC70190358F7F16",
441 "F63D442A584DA71786ADEC9F3346DF75",
442 "549078F4B0CA7079B45F9A5ADAFAFD99",
443 "F2A5986EE4E9984BE2BAFB79EA8152FA",
444 "8A74535017B4DB2776668A1FAE64384C",
445 "E613342F57A97FD95DC088711A5D0ECD",
446 "3FFAEBF6B22CF1DC82AE17CD48175B01",
447 "BAFD52EFA15C248CCBF9757735E6B1CE",
448 "7AF94BC018D9DDD4539D2DD1C6F4000F",
449 "FE177AD61CA0FDB281086FBA8FE76803",
450 "74DBEA15E2E9285BAD163D7D534251B6",
451 "23DD21331B3A92F200FE56FF050FFE74",
452 "A69C5AA34AB20A858CAFA766EACED6D8",
453 "3F72BB4DF2A4F941A4A09CB78F04B97A",
454 "72CC43577E1FD5FD14622D24D97FCDCC",
455 "D83AF8EBE93E0B6B99CAFADE224937D1",
456 "44042329128D56CAA8D084C8BD769D1E",
457 "14102D72290DE4F2C430ADD1ED64BA1D",
458 "449124097B1ECD0AE7065206DF06F03C",
459 "D060A99F8CC153A42E11E5F97BD7584A",
460 "65605B3EA9261488D53E48602ADEA299",
461 "C5E5CAD7A208DE8EA6BE049EFE5C7346",
462 "4C280C46D2181646048DD5BC0C0831A5",
463 "5DD65CF37F2A0929559AABAFDA08E730",
464 "31F2335CAAF264172F69A693225E6D22",
465 "3E28B35F99A72662590DA96426DD377F",
466 "570F40F5D7B20441486578ED344343BE",
467 "C54308AD1C9E3B19F8B7417873045A8C",
468 "CBF335E39CE13ADE2B696179E8FD0CE1",
469 "9C2FBF422355D8293083D51F4A3C18A9",
470 "5ED8B5A31ECEFAB16C9AA6986DA67BCE",
471 "627815DCFC814ABC75900041B1DD7B59",
472 "9EF3E82A50A59F166260494F7A7F2CC3",
473 "878CD0D8D920888B5935D6C351128737",
474 "E44429474D6FC3084EB2A6B8B46AF754",
475 "EBAACF9641D54E1FB18D0A2BE4F19BE5",
476 "13B3BF497CEE780E123C7E193DEA3A01",
477 "6E8F381DE00A41161F0DF03B4155BFD4",
478 "35E4F29BBA2BAE01144910783C3FEF49",
479 "55B17BD66788CEAC366398A31F289FFB",
480 "11341F56C0D6D1008D28741DAA7679CE",
481 "4DF7253DF421D83358BDBE924745D98C",
482 "BAE2EE651116D93EDC8E83B5F3347BE1",
483 "F9721ABD06709157183AF3965A659D9D",
484 "19A1C252A613FE2860A4AE6D75CE6FA3",
485 "B5DDB2F5D9752C949FBDE3FFF5556C6E",
486 "81B044FCFFC78ECCFCD171AAD0405C66",
487 "C640566D3C06020EB2C42F1D62E56A9B",
488 "EA6C4BCF425291679FDFFD26A424FBCC",
489 "57F6901465D9440D9F15EE2CBA5A4090",
490 "FBCFA74CADC7406260F63D96C8AAB6B1",
491 "DFF4F096CEA211D4BBDACA033D0EC7D1",
492 "1EE5190D551F0F42F675227A381296A9",
493 "F98E1905012E580F097623C10B93054F",
494 "E7D43743D21DD3C9F168C86856558B9A",
495 "632A9DDA730DAB67593C5D08D8AC1059",
496 "E084317000715B9057BC9DE9F3AB6124",
497 "61F9EF33A0BB4E666C2ED99101919FAB",
498 "6DC1D68A11834657D46703C22578D59A",
499 "53AC1548863D3D16F1D4DC7242E05F2C",
500 "E82CD587A408306AD78CEAE0916B9F8C",
501 "0FD2D40EA6AD17A3A767F0A8600D6295",
502 "AD84CC8255ADB39DFCA23F92761AE7E9",
503 "F4F20CF7D51BEE7DA024A2B11A7ECA0B",
504 "5057691B85D9CE93A193214DB0A016B6",
505 "0F58C960876390BDEF4BB6BE95CAA1EE",
506 "9A3E66EEBC21BC0BD9430B341EF465FA",
507 "20415035F34B8BCBCB28ABF07F78F0D4",
508 "AC89FC7BA10479EBF10DE65BCEF89B3C",
509 "068FA75A30BE443171AF3F6FEB1A20D2",
510 "50E02F213246C525A8C27700CA34B502",
511 "227DA47D5A0906DB3AB042BB0A695FB6",
512 "8663AC30ED12514F1DE46777F4514BFC",
513 "A987D4BC12E1DE9F4B6DF43567C34A8B",
514 "6D5A0370F599ACA605F63B04E5143D0C",
515 "9809266E378B07B7AFDB3BAA97B7E442",
516 "8F753252B30CCCACE12D9A301F4D5090",
517 "032465F6C0CE34D41962F561692A1AFF",
518 "C50E9AD5BEB8F3B00821DD47FF8AC093",
519 "9C6FEA3D46268D54A6829B2AD25BB276",
520 "0FD8575E87706F561343D7B3A41E044A",
521 "BEE9BEB3739540D88CBCE77925F0A114",
522 "D24EAEE7FFFBAC3D6F26C2DCE0DCDE28",
523 "47771A90398FF0F7FA821C2F8F5E1398",
524 "4639741B6F84B135AD118C8249B64ED0",
525 "8EE5505EC85567697A3306F250A27720",
526 "7C8A19AC1AEFBC5E0119D91A5F05D4C2",
527 "5141B9B672E54773B672E3A6C424887B",
528 "B5A2D3CD206653C6402F34FB0AE3613D",
529 "0F5BD9408738231D114B0A82753279A3",
530 "FEF033FF4268EA487FC74C5E43A45338",
531 "A3EDC09DCD529B113910D904AD855581",
532 "AB8FBB6F27A0AC7C55B59FDD36B72F1C",
533 "EEA44D5ED4D769CC930CD83D8999EC46",
534 "6972276803AE9AA7C6F431AB10979C34",
535 "86DEAA9F39244101818178474D7DBDE9",
536 "88C6B466EA361D662D8D08CBF181F4FE",
537 "91AB2C6B7C63FF59F7CBEEBF91B20B95",
538 "2DFE6C146AD5B3D8C3C1718F13B48E01",
539 "C7CFF1623451711391A302EEC3584AAA",
540 "089FE845CC05011686C66019D18BE050",
541 "08C8410B9B427211A67124B0DCCEAD48",
542 "8D91592F5566085254784606334D7629",
543 "3298FEAAF2E1201D6299FF8846639C97",
544 "C497CB9F0BDFE0EFC8C2F3F90760AA72",
545 "2788AFD046E0309CBE4424690DA2AB89",
546 "E9891707F25EF29FEE372890D4258982",
547 "DB041D94A23D45D4D4DCED5A030CAF61",
548 "FFAFDBF0ECB18DF9EA02C27077448E6D",
549 "2DAAA42A7D0A1D3B0E4761D99CF2150A",
550 "3B7A54CB7CF30ABE263DD6ED5BFE8D63",
551 "EEFA090174C590C448A55D43648F534A",
552 "9E15798731ED42F43EA2740A691DA872",
553 "31FBD661540A5DEAAD1017CFD3909EC8",
554 "CDA9AE05F224140E28CB951721B44D6A",
555 "0C5BC512C60A1EAC3434EFB1A8FBB182",
556 "AA863610DEEEEB62D045E87EA30B59B5",
557 "6AC2448DE568D279C7EEBE1DF403920C",
558 "E2011E3D292B26888AE801215FD0CB40",
559 "E06F3E15EE3A61672D1C99BADE5B9DBE",
560 "BB7027F0548CF6712CEB4C7A4B28E178",
561 "061EC21FB70FADBDF87C3BD2AE23825B",
562 "4C21F26FE94ABBAC381352375314C3EB",
563 "F7CEE6DD99909C2B569EEDA61ED8942E",
564 "CE98C4A876C65E4CCB261EBB1D9DF7F5",
565 "A5491881CF833C3604ABC08044F402AC",
566 "A1BA16E64CCCB3087D57A768507B0BFC",
567 "D55951E202D2949EBD3BE43120C738BF",
568 "EBB8E43069E69F450EFEC65DCD52B7FD",
569 "2B292135663B4AA5ABFE9423D57E7EE9",
570 "E91BF974B3BE3AD966249D8655292A85",
571 "384365998EAA9562236CC58F6ADF9610",
572 "C2E997012AA3D4D8D359C9A947CBE69F",
573 "F49421204148BA213BE87E2D5C22B0BF",
574 "82ED0ED9953AA92E4DF30929CA65C00F",
575 "291EB1D11653C8479437C74A977F5106",
576 "BCB997B1939B8983ABD550D6025683E3",
577 "1FBA2592C6F489775CAADA71F9B983E9",
578 "969F66F217AF1A3DB9E41C1B29039824",
579 "A54BB7D6B17E423AC0A7744C19073CB8",
580 "B0AC6E6578D1021F47DCF9748A32EAD5",
581 "B87B361C3B7B194C77A4358D4669153E",
582 "46A133847F96EAA8282A799DC8899D58",
583 "2265EC3A9F2D5C9547A091CC8CFB18EA",
584 "54CBF3A6FC4FE56D426117AA1FFD1DDE",
585 "5312877CCEAB6CFB0905394A370A8003",
586 "7190BD6EC613FE38B84ECFE28F702FE4",
587 "D1FA5B9CA89A43B04C05F0EF29EF68CD",
588 "808285751548ED934FD1056D2D9AE8BA",
589 "2758DEF3E7B95A9AE89777BE64D5A6CF",
590 "07D81F87DB3E0ACC82B01E08FB22F3C1",
591 "8DA250E5553D650711A75EE1CB4FD1C7",
592 "A93D946BD0E87F32719DF5F158CEE669",
593 "03945236EC2A4D4EAF30B8ABEB54330D",
594 "11CC35301F24B79DDE31AEA2D1354F88",
595 "E73715B3E8D9A290F44AE6FFBF247E5D",
596 "7345E07732B71CB158BBF64CCA5C5B96",
597 "6E128F296D24705A1924FD9B70C4ED04",
598 "95A789776F036783FBD330947083F54F",
599 "360DEC2533EA4AA2E3E54FD3DE2906EB",
600 "E68EFD7FECF4D601EA22727BD764965B",
601 "9065C64A8BFF44AC33EDBB611CF83D7B",
602 "8F33C8DF2A7A51CE8090E8F123BC3723",
603 "807F391FFBA8291BA625623210F99018",
604 "5E8B3F3A701522CE5CAA761C929D6292",
605 "3BA404DC38735A78289E3809E8364835",
606 "D23BEDBAD229F8305DC425B6B759DCC9",
607 "44880F21CF5913040AE376AEE2A10AD8",
608 "9BC98E29D057C0E828C3B5CCE69256C1",
609 "B293CC7A975DA141A68279368057CC41",
610 "8D60FB87ACD91385B313BE5F1D7BD30F",
611 "2C8E56132D70291B303C48FDF75543CD",
612 "D1F80035B826791F6CE4E59B7DB1BB0D",
613 "42CE6224FC36469339A133DD08173BD4",
614 "61817155EA41BCBA2AF7F06AE7CBF585",
615 "D1923A9866068D2EF5FB77D57C3315B6",
616 "B37CBDB5D719F49691CA968EF2E84140",
617 "EC974E653A055D7F8F22171030F68E1D",
618 "DDE5D3B9AAD9C32213BB3675A822499C",
619 "D3B6E9216EA1AE57EB1C628A3C38AB78",
620 "82C99ECC69472B7E96324B042AE8B87A",
621 "97144DC5338C43600F84439C0AA0D147",
622 "400AC4A0BBADA1DB2121EB144C7E5209",
623 "EFD9D550EB419ED278F4885A490AB54C",
624 "2AB7816E149B7C0404C88A8857793670",
625 "5B591DFF9E8DEE15BAD24C025DBCA481",
626 "0C06633E30721C3749F49AD8CBF2B754",
627 "96D6D31A41B5123B2035FD91A921D4CA",
628 "E7F6C34D86668BC2805CA7793C5E86AD",
629 "F46DFF5FF500D6879C4D3E45CF0CF0F3",
630 "60D842D9C61DA7495C116197B7CECBBE",
631 "D45B24EDB673353EBDF248B8FA06B67A",
632 "119EAEBCC165D0BD02C0D35DC82EF992",
633 "E673143680414ADA301D0ED34626B9FE",
634 "6B6CFE160A6263631B292F879EEFF926"
635         }
636     };
637 
638     private static int[] KEY_SIZES = {
639         16, 24, 32
640     };
641 
642     /**
643      * Constructs an AES Key according to the specified key size and
644      * round number.
645      * @param len key size in bytes, i.e. 16, 24, or 32
646      * @param rounds round number starting from 0, i.e. valid from 0 to len-1.
647      */
648     private static SecretKey constructAESKey(int len, int rounds)
649         throws IllegalArgumentException {
650         if ((len != 16) && (len != 24) && (len != 32)) {
651             throw new IllegalArgumentException("Wrong Key Length: " + len);
652         }
653         byte[] rawKeyValue = constructKeyValue(len, rounds);
654         SecretKeySpec key = new SecretKeySpec(rawKeyValue, "AES");
655         return key;
656     }
657 
658     private static byte[] constructKeyValue(int keysize, int rounds) {
659         byte[] tempKeyValue = new byte[keysize];
660         Arrays.fill(tempKeyValue, (byte)0);
661 
662         int whichByte = rounds/8;
663         int whichDigit = rounds % 8;
664         if ((whichByte >= keysize) || (whichDigit < 0) ||
665             (whichDigit > 8)) {
666             throw new IllegalArgumentException("Invalid keysize/rounds " +
667                                                "combination :" + keysize +
668                                                "/" + rounds);
669         }
670         switch (whichDigit) {
671         case 0:
672             tempKeyValue[whichByte] = (byte)0x80;
673             break;
674         case 1:
675             tempKeyValue[whichByte] = (byte)0x40;
676             break;
677         case 2:
678             tempKeyValue[whichByte] = (byte)0x20;
679             break;
680         case 3:
681             tempKeyValue[whichByte] = (byte)0x10;
682             break;
683         case 4:
684             tempKeyValue[whichByte] = (byte)0x08;
685             break;
686         case 5:
687             tempKeyValue[whichByte] = (byte)0x04;
688             break;
689         case 6:
690             tempKeyValue[whichByte] = (byte)0x02;
691             break;
692         case 7:
693             tempKeyValue[whichByte] = (byte)0x01;
694             break;
695         }
696         return tempKeyValue;
697     }
698 
699     private static byte[] constructByteArray(String s) {
700         int len = s.length()/2;
701         byte[] tempValue = new byte[len];
702         for (int i = 0; i < len; i++) {
703             tempValue[i] = Integer.valueOf(s.substring(2*i, 2*i+2),
704                                            16).byteValue();
705         }
706         return tempValue;
707     }
708 
709     public boolean execute() throws Exception {
710         String transformation = ALGO+"/"+MODE+"/"+PADDING;
711         Cipher c = Cipher.getInstance(transformation, "SunJCE");
712 
713         for (int i=0; i<KEY_SIZES.length; i++) {
714             if (KEY_SIZES[i]*8 >
715                 Cipher.getMaxAllowedKeyLength(transformation)) {
716                 // skip if this key length is larger than what's
717                 // configured in the jce jurisdiction policy files
718                 continue;
719             }
720             int rounds = KEY_SIZES[i] * 8;
721             byte[] plainText = PT;
722             byte[] cipherText = null;
723             try {
724             for (int j=0; j < rounds; j++) {
725                 SecretKey aesKey = constructAESKey(KEY_SIZES[i], j);
726                 c.init(Cipher.ENCRYPT_MODE, aesKey);
727                 cipherText = c.doFinal(plainText);
728                 byte[] answer = constructByteArray(CTS[i][j]);
729                 if (!Arrays.equals(cipherText, answer)) {
730                     throw new Exception((i+1) + "th known answer test failed for encryption");
731                 }
732                 c.init(Cipher.DECRYPT_MODE, aesKey);
733                 byte[] restored = c.doFinal(cipherText);
734                 if (!Arrays.equals(plainText, restored)) {
735                     throw new Exception((i+1) + "th known answer test failed for decryption");
736                 }
737             }
738             System.out.println("Finished KAT for " + KEY_SIZES[i] + "-byte key");
739             } catch (SecurityException se) {
740                 TestUtil.handleSE(se);
741             }
742         }
743 
744         // passed all tests...hooray!
745         return true;
746     }
747 
748     public static void main (String[] args) throws Exception {
749         Security.addProvider(new com.sun.crypto.provider.SunJCE());
750 
751         TestKATForECB_VK test = new TestKATForECB_VK();
752         String testName = test.getClass().getName() + "[" + ALGO +
753             "/" + MODE + "/" + PADDING + "]";
754         if (test.execute()) {
755             System.out.println(testName + ": Passed!");
756         }
757     }
758 }